package com.grupoconstruobras.sigo.personas;

import com.grupoconstruobras.sigo.data.personas.Persona;
import com.grupoconstruobras.sigo.personas.dto.PersonaNaturalDto;
import com.grupoconstruobras.sigo.ServiceException;
import com.grupoconstruobras.sigo.general.ICrudManager;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.ejb.StatefulTimeout;

import org.dozer.DozerBeanMapper;

@StatefulTimeout(unit = TimeUnit.MINUTES, value = 30)
@Stateful(name = "personaNaturalBusiness", mappedName = "ejb/business/personaNaturalBusiness")
@EJB(beanInterface = IPersonaNaturalBusiness.class, beanName = "personaNaturalBusiness", name = "ejb/business/personaNaturalBusiness")
public class PersonaNaturalBusinessEjb extends
		PersonaBusinessAbstract<Integer, PersonaNaturalDto> implements
		IPersonaNaturalBusiness {

	private static final long serialVersionUID = 7213655465261524366L;
	private static Logger LOG = Logger
			.getLogger(PersonaNaturalBusinessEjb.class.getName());
	private DozerBeanMapper mapper;
	private PersonaNaturalDto persona;

	@EJB(beanInterface = ICrudManager.class, beanName = "personaNaturalManager")
	private ICrudManager<Integer, Persona> personaNaturalCrud;

	/**
	 * Obtiene un objeto de tipocom.grupoconstruobras.sigo.personas.dto.PersonaNaturalDto
	 * transformandolo a traves de personas-mapping.xml mediante la consulta de
	 * un objeto tipo com.grupoconstruobras.sigo.data.personas.Persona
	 */
	@Override
	public PersonaNaturalDto get(Long id) throws ServiceException {
		try {
			Persona personaEntiy = personaNaturalCrud.getById(Integer
					.valueOf(id.toString()));
			persona = mapper.map(personaEntiy, PersonaNaturalDto.class,
					"Persona");
			return persona;
		} catch (Exception e) {
			LOG.severe(e.getMessage());
			throw new ServiceException("Ocurrio un error desconocido");
		}
	}

	/**
   * 
   */
	public PersonaNaturalBusinessEjb() {
		List<String> mappingFiles = new ArrayList<String>();
		mappingFiles.add("/META-INF/personas-mapping.xml");
		mapper = new DozerBeanMapper(mappingFiles);
	}

	/**
	 * Registro persona
	 */
	@Override
	public PersonaNaturalDto newInstance() {
		this.persona = new PersonaNaturalDto();
		return persona;
	}

	@Override
	public PersonaNaturalDto getCurrent() {
		return null;
	}

//	@Override
//	public PersonaNaturalDto agregar(PersonaNaturalDto dto)
//			throws ServiceException {
//
//		Persona per = mapper.map(dto, Persona.class, "Persona");
//		if (per.getIdgenero() == null || per.getIdgenero().trim().equals("")) {
//			per.setIdgenero(null);
//		}
//		if (dto.getIdgrupos_etnicos() == null) {
//			per.setGrupos_etnicos(null);
//		}
//		if (dto.getIdTipoDocumentoDeIdentidad() == null) {
//			per.setTipoDocumentodeidentidad(null);
//		}
//		personaNaturalCrud.save(per);
//		dto.setId(per.getId()); // devuelva el id de la persona que registro.
//		return dto;
//	}

	@Override
	public PersonaNaturalDto modificar(PersonaNaturalDto dto)
			throws ServiceException {
		Persona per = mapper.map(dto, Persona.class, "Persona");
		personaNaturalCrud.merge(per.getId(), per);
		return dto;
	}
}